浮点数double在内存中的存储方式 | 您所在的位置:网站首页 › double a占几个字节 › 浮点数double在内存中的存储方式 |
C语言中浮点数在内存中的存储方式 C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢? float在内存中的存储方式如下图所示: double在内存中的存储方式如下图所示: 无论是单精度还是双精度在存储中都分为三个部分: 1.符号位(Sign) : 0代表正,1代表为负 2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储。可能叫阶码更准确一些,计算机原理学完就忘了。127和1023是为了考虑指数位的正负。 3.尾数部分(Mantissa):尾数部分 首先来看float类型(以2.25为例) 步骤一:符号位(占1个bit位)的数值 很容易看出此数为正数,因此符号位为0。 步骤二:指数位(占8个bit位)的数值 ***步:先将十进制的2.25转换成二进制0010.01; 第二步:将10.01用二进制的科学计数法表示为1.001; 第三步:将第二步所得数值写成指数形式1.001*(2^1); 第四步:将指数数值1+127=128,将128转化成二进制形式(1000 0000)写到指数部位。 步骤三:尾数部分(占23个bit位)的数值 将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。 所以单精度浮点数2.25在内存中的表示方式为: 0 1000 0000 00100000000000000000000 再来看double类型(还是以2.25为例) 步骤一:符号位(占1个bit位)的数值 很容易看出此数为正数,因此符号位为0。 步骤二:指数位(占11个bit位)的数值 ***步:先将十进制的2.25转换成二进制0010.01; 第二步:将10.01用二进制的科学计数法表示为1.001; 第三步:将第二步所得数值写成指数形式1.001*(2^); 第四步:将指数数值1+1023=1024,将124转化成二进制形式(100 0000 0000)写到指数部位。 步骤三:尾数部分(占52个bit位)的数值 将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。 所以双精度浮点数2.25在内存中的表示方式为: 0 100 0000 0000 0010000000000000000000000000000000000000000000000000 参考链接: 浮点数在内存中的存储方式 float和double类型数据在内存中的存储方法 float 和double在内存中到底是怎么存储的? |
CopyRight 2018-2019 实验室设备网 版权所有 |